import { sysLogin, sysProfile, sysUser } from '@/api/user'
import router, { asyncRoutes, constantRoutes, resetRouter } from '@/router'
export default {
  namespaced: true,
  state: {
    token: '',
    userInfo: ''
  },
  mutations: {
    setToken(state, value) {
      state.token = value
    },
    // 存储用户基本信息
    setUserInfo(state, value) {
      state.userInfo = value
    },
    // token超时处理
    loginOut(state) {
      state.token = ''
      state.userInfo = ''
      // 重置路由
      resetRouter()
    }
  },
  actions: {
    async toLogin(store, form) {
      const res = await sysLogin(form)
      // 获取员工头像信息
      store.commit('setToken', res.data)
    },
    // 请求用户数据
    async getUserInfo(store) {
      const res = await sysProfile()
      const res1 = await sysUser(res.data.userId)
      // 合并两个对象的数据
      const resultRes = Object.assign({}, res.data, res1.data)
      // 一拿到当前用户的路由权限
      // 路由权限数据：resultRes.roles.menus
      // 动态路由数据：router/asyncRoutes
      // 匹配过程：对动态路由数据做筛选，选择当前项的meta.name的值在路由权限数据中是否存在
      const newArr = asyncRoutes.filter((item) => {
        return resultRes.roles.menus.includes(item.meta.name)
      })
      newArr.push({ path: '*', redirect: '/404', hidden: true })
      // 通过router.addRoutes（匹配到的路由）添加有权限的动态路由
      router.addRoutes(newArr)
      // 将数据同步到vuex中
      store.commit('routes/setrouterList', [...constantRoutes, ...newArr], {
        root: true
      })
      // addRputes添加的路由不能立马使用，需要经过一次导航守卫就可以使用了
      store.commit('setUserInfo', resultRes)
    }
  },
  getters: {}
}
